package com.cp.mtq.test.digui;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

public class Demo {

    /**
     * 自定义函数求1~5之间的和值
     * 5+4+3+2+1
     */
    public static int add(int n)
    {
        /*
         * 判断n是否大于1
         */
        if(n>1)
        {
            //这里的add函数调用了函数自己本身的做法就是函数的递归调用
            return n+add(n-1);
        }
        //返回1作为递归的结束条件
        return 1;
    }
    /**
     *   使用方式一来求5的阶乘
     */
    public static int jc(int n) {
        //定义 一个变量来接收阶乘后的结果
        int result =1;
        for (int i = 2; i <= n; i++)
        {
            result=result*i;
        }
        return result;
    }

    /**
     * 自定义函数求5的阶乘
     * @param n
     * @return
     */
    public static int jc2(int n) {
        // 结束条件
        if(n<=1)
        {
            return 1;
        }
        return n*jc2(n-1);
    }

    /**
     * 递归练习，斐波那契数列
     *      月份 ：    1   2   3   4   5   6   7   8   9   10.。。。
     * 兔子对数：      1   1    2   3    5   8   13   21  34    55.。。。
     * 求第n个月的兔子对数
     */
    public static int countRabbits(int n) //n表示月份
    {
        // 结束条件
        if(n<=2)
        {
            return 1;
        }
        //规律
        return countRabbits(n-1)+countRabbits(n-2);
    }

    /**
     * 需求：扫描D:\\test所有子文件及子子文件下的.jpg文件，输出其绝对路径。
     * 思路：
     * A:创建父目录
     * B:调用函数查找文件或者文件夹
     * C:通过父目录对象调用函数获取所有儿子的File数组
     * D:循环遍历所有的儿子,dir表示父目录D:\\test的每一个儿子
     *      a:判断获取的儿子dir是否是文件夹 如果是 执行步骤B
     *      b:不是，判断后缀名是否是.jpg,是，输出绝对路径
     *
     * 我们发现：B到D的过程是不断重复。我们可以封装成递归的函数。
     */
    public static void scanFolderAndFile(File parent) throws Exception {
        //通过父目录对象调用函数获取所有儿子的File数组
        if(parent == null) throw new Exception();
        if(!parent.exists()) throw new Exception();
        if(parent.isFile()) throw new Exception();

        File[] dirs = parent.listFiles();
        //循环遍历所有的儿子,dir表示父目录D:\\test的每一个儿子
        for (File dir : dirs) {
            /*
             * 判断获取的儿子dir是否是文件夹
             * 如果是文件夹，那么继续扫描或者查找儿子下面的所有文件或者文件夹
             * 以此类推
             * 如果不是文件夹，那么肯定是文件，判断后缀名是否是.jpg
             *      如果是.jpg 则输出其绝对路径
             */
            if(dir.isDirectory())
            {
                //说明是文件夹  继续找儿子下面的文件或者文件夹 执行扫描函数
                scanFolderAndFile(dir);
            }else
            {
                /*
                 * 说明不是文件夹，是文件,我们判断是否是.jpg
                 * dir.getName()表示获取文件的名字  mm.jpg
                 */
                if(dir.getName().endsWith(".jpg"))
                {
                    //说明文件的后缀名是.jpg 输出其绝对路径
                    System.out.println(dir.getAbsolutePath());
                }
            }
        }
    }

    public static void main(String[] args) {

    }
}
